home *** CD-ROM | disk | FTP | other *** search
- 'AMORTQB.BAS Copyright 1993 by JN Goodale
- 'Date: [93-12-20]
- '
- ' *** NOTE ***
- ' This program is included for the purpose of demonstrating BASICXR.
- ' The program works correctly, but may contain errors if run with
- ' unusual input. The author assumes no responsibility for making
- ' corrections to AMORTQB.BAS!
- '
- 'Desc: Amortization of a Loan - Find Amount of Level Payment
- '
- '
- ' P=Principal
- ' R=Interest Rate
- ' I=Interest/Period
- ' N=Number of Payments (Periods)
- ' A=Amount of Level Payment
- '
- '
- '
- ' P * I
- ' A = --------------
- ' 1
- ' 1 - --------
- ' (1+I) ^N Where ^N is "to the Nth Power"
- '
- '.......................................................................
-
-
- DIM text$(24)
- ' 0 1 2 3 4 5
- ' 123456789 123456789 123456789 123456789 123456789 123456789
- text$(1) = " [ LOAN AMORTIZATION ]"
- text$(2) = " "
- text$(3) = " Calculate a Level Loan Payment, given:"
- text$(4) = " Loan Principal, nearest full $ (Max 500000)"
- text$(5) = " Interest Rate per Year (Max 30.00), Full %, as in 7.75 = 7.75%"
- text$(6) = " Number of months to Pay (Max 480)"
- text$(7) = " I.E. 30 Years = 360 Months"
- text$(8) = " 4 Years = 48 Months"
- text$(9) = STRING$(80, 220)
- text$(10) = " Enter Amount of PRINCIPAL: (Q-to Quit)"
- text$(11) = " Enter Interest Rate %: "
- text$(12) = " Enter Number of Months: "
- text$(13) = " "
- text$(14) = " The MONTHLY Payment on the above loan would be: $"
- text$(15) = " "
- text$(16) = " V-To View loan schedule"
- text$(17) = " Q-To Quit"
- text$(18) = " "
- text$(19) = " "
- text$(20) = " Choice ? _"
- text$(21) = " "
- text$(22) = " "
- text$(23) = " "
- text$(24) = " "
- ' 123456789 123456789 123456789 123456789 123456789 123456789
- ' 0 1 2 3 4 5
-
- DIM heading$(3)
- heading$(1) = " [ Loan Amortization Table ]"
- heading$(2) = " Payment # Balance Interest Principal"
- heading$(3) = " "
-
- E0$ = "#######": E2$ = "#######.##": EI$ = "####"
-
- StartProcess:
- GetPrincipal:
- CLS
- FOR i = 1 TO 10: PRINT text$(i): NEXT i
- LOCATE 10, 34: LINE INPUT Principal$
- IF (Principal$ = "Q") OR (Principal$ = "q") THEN GOTO EndProgram
- n = INSTR(Principal$, ".")
- IF n THEN Principal$ = LEFT$(Principal$, n - 1)
- Principal = VAL(Principal$)
- IF Principal < 1 THEN GOTO StartProcess
- IF Principal > 500000 THEN GOTO StartProcess
- LOCATE 11, 1: PRINT text$(11)
-
- GetInterest:
- LOCATE 11, 35: LINE INPUT InterestRate$
- InterestRate = VAL(InterestRate$) / 1200
- IF (InterestRate < 0) OR (InterestRate > 30 / 1200) THEN
- LOCATE 11, 35
- PRINT SPACE$(10);
- GOTO GetInterest
- END IF
- LOCATE 12, 1: PRINT text$(12)
-
- GetMonthsToPay:
- LOCATE 12, 35: LINE INPUT Months$
- Months% = VAL(Months$) \ 1
- Months = Months%
- IF (Months% < 1) OR (Months% > 480) THEN
- LOCATE 12, 35
- PRINT SPACE$(10);
- GOTO GetMonthsToPay
- END IF
-
- CalculateAmount:
- x = (1 + InterestRate) ^ Months%
- y = 1 / x
- z = 1 - y
- Amount = (Principal * InterestRate) / z
-
- PrintAmount:
- LOCATE 14, 1
- FOR i = 14 TO 20: PRINT text$(i): NEXT i
- LOCATE 14, 57: PRINT USING E2$; (Amount);
- LOCATE 20, 37
-
- GetChoice:
- k$ = INKEY$
- IF k$ = "" THEN GOTO GetChoice
- k$ = UCASE$(k$)
- IF k$ = "Q" THEN GOTO EndProgram
- IF k$ = "V" THEN GOSUB PrintLoanTable
- GOTO StartProcess
-
- EndProgram:
- CLS
- END
-
- PrintLoanTable:
- GOSUB HeadUpTableX: Balance = Principal
- FOR i% = 1 TO Months%
- InterestPay = Balance * InterestRate
- PrincipalPay = Amount - InterestPay
- Balance = Balance - PrincipalPay
- Row = Row + 1
- IF Row > 22 THEN GOSUB HeadUpTable
- IF k$ = "Q" THEN RETURN
- PRINT " ";
- PRINT USING EI$; (i%); : PRINT " ";
- PRINT USING E0$; Balance; : PRINT " ";
- PRINT USING E2$; InterestPay; : PRINT " ";
- PRINT USING E2$; PrincipalPay
- NEXT i%
- GOSUB HeadUpTable
- RETURN
-
- HeadUpTable:
- PRINT
- PRINT TAB(20); "Q-To Quit, Any Other Key to Continue ......";
- GetAKey:
- k$ = INKEY$
- IF k$ = "" THEN GOTO GetAKey
- k$ = UCASE$(k$)
- HeadUpTableX:
- CLS
- IF k$ = "Q" THEN RETURN
- FOR Row = 1 TO 3: PRINT heading$(Row): NEXT Row
- RETURN
-
-